<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>784. 字母大小写全排列</title>
  </head>
  <body>
    <script>
      //     给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。

      // 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。

      //

      // 示例 1：

      // 输入：s = "a1b2"
      // 输出：["a1b2", "a1B2", "A1b2", "A1B2"]
      // 示例 2:

      // 输入: s = "3z4"
      // 输出: ["3z4","3Z4"]
      //

      // 提示:

      // 1 <= s.length <= 12
      // s 由小写英文字母、大写英文字母和数字组成

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/letter-case-permutation
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
      /**
       * @param {string} s
       * @return {string[]}
       */
      var letterCasePermutation = function (s) {
        const ans = [],
          n = s.length
        function dfs(i, tmp) {
          if (i === n) return ans.push(tmp)
          if (isNaN(s[i])) {
            dfs(i + 1, tmp + s[i].toLowerCase())
            dfs(i + 1, tmp + s[i].toUpperCase())
          } else {
            dfs(i + 1, tmp + s[i])
          }
        }
        dfs(0, '')
        return ans
      }
      console.log(letterCasePermutation('a1b2'))
    </script>
  </body>
</html>
